１６個の要素をもつ体 GF (2^4) を用いて符号を構成する。

α は (α^4) + α + 1 をみたす数とする。

minimal = α^4 + α + 1

GF (2^4) のすべての要素を加法表示と乗法表示したもののリストを作る。

additive=Table[
PolynomialMod[α^(14-i),{minimal ,2}],
{i,0,14}]~
Join~{0}

multiplicative=Table[α^(14-i),{i,0,14}]~
Join~{0}

toA は加法表示に直すため、toM は乗法表示に直すための関数。

toA[elem_]:=PolynomialMod[elem,{minimal ,2}]

For[i= 1, i<16,i++,toM0[additive[[i]]]=α^(15-i)];
toM0[0]=0;
toM[elem_]:=toM0[PolynomialMod[elem,{minimal ,2}]]

符号を生成する多項式を10次式とし、情報ビット数５，訂正能力３の符号を作る。

generator =  (1+x+(x^2)+(x^3)+(x^4)) (1+x+(x^4))(1+x+x^2)

encode は５次元ベクトルを１５次の符号多項式 （符号語） に直す関数。
まず５次元ベクトルから４次多項式を作り、それを生成多項式にかけて１５次多項式を作る。
decode はこれを元に戻す関数。生成多項式による商を取る。

encode[vector_]:=
PolynomialMod[
vector.Table[x^(Length[vector]-i),{i,1,Length[vector]}]*generator,{2}]

decode[polynomial_]:=
Coefficient[
PolynomialMod[PolynomialQuotient[polynomial,generator,x],2],
x,Table[5-i,{i,1,5}]]

具体例：{1, 1, 0, 1, 0}を１５次の符号多項式に直す。

sent=encode[{1,1,0,1,0}]

ノイズを加えてみる。

received=PolynomialMod[sent+(x^6)+(x^7)+(x^12),2]

間違いを訂正せずにベクトルに戻してみる。

decode[received]

シンドロームを計算する

(Subscript[s, 1])=toM[received/.x->α]
(Subscript[s, 3])=toM[received/.x->(α^3)]
(Subscript[s, 5])=toM[received/.x->(α^5)]

誤りを解に持つ３次方程式を作る。

eq=toM[(((Subscript[s, 1])^3)+(Subscript[s, 3]))]X^3 +
toM[ (Subscript[s, 1])(((Subscript[s, 1])^3)+(Subscript[s, 3])) ]X^2 + 
toM[(((Subscript[s, 1])^2)(Subscript[s, 3])+(Subscript[s, 5]))]X +
toM[(((Subscript[s, 1])^3) + (Subscript[s, 3]))((Subscript[s, 1])^3) +((Subscript[s, 3])^2)+(Subscript[s, 1]) (Subscript[s, 5])]

(α^i)を次々に代入し０になる場所を見る。

Table[PolynomialMod[eq/.X->(α^i),{minimal,2}],{i,0,14}]